/*
78. 子集
给定一组不同的整数 nums，返回所有可能的子集（幂集）。

注意事项：该解决方案集不能包含重复的子集。

例如，如果 nums = [1,2,3]，结果为以下答案：

[
  [3],
  [1],
  [2],
  [1,2,3],
  [1,3],
  [2,3],
  [1,2],
  []
]
*/
#include <vector>
using namespace std;

class Solution
{
public:
    vector<vector<int>> subsets(vector<int> &nums)
    {
        vector<vector<int>> ret;
        vector<int>         asn;
        ret.push_back(asn);
        if(nums.size() == 0) return ret;
        for(int i = 0; i < nums.size(); i++) {
            int count = ret.size();
            int k = nums[i];
            for(int j = 0; j < count; j++) {
                asn = ret[j];
                asn.push_back(k);
                ret.push_back(asn);
            }
        }
        return ret;
    }
};